package cn.sfrog.project.biz.admin.service;

import cn.sfrog.project.biz.admin.domain.BizServiceOrder;
import cn.sfrog.project.biz.admin.domain.vo.*;
import cn.sfrog.project.biz.web.vo.order.*;
import cn.sfrog.system.domain.vo.BizStatusChangeVO;
import com.baomidou.mybatisplus.extension.service.IService;

import java.util.Date;
import java.util.HashMap;
import java.util.List;

/**
 * 服务订单Service接口
 */
public interface IBizServiceOrderService extends IService<BizServiceOrder> {
    /**
     * 查询服务订单
     *
     * @param id 服务订单主键
     * @return 服务订单
     */
    public BizServiceOrderVO selectBizServiceOrderById(Long id);

    /**
     * 查询服务订单列表
     *
     * @param query 服务订单
     * @return 服务订单集合
     */
    public List<BizServiceOrderVO> selectBizServiceOrderList(BizServiceOrderQueryVO query);

    /**
     * 查询服务订单待派单列表
     * @param queryVO
     * @return
     */
    List<BizServiceOrderVO> selectBizServiceOrderDispatchList(BizServiceOrderQueryVO queryVO);

    /**
     * 新增服务订单
     *
     * @param form 服务订单
     * @return 结果
     */
    public boolean insertBizServiceOrder(BizServiceOrderFormVO form);

    /**
     * 修改服务订单
     *
     * @param form 服务订单
     * @return 结果
     */
    public boolean updateBizServiceOrder(BizServiceOrderFormVO form);

    /**
     * 批量删除服务订单
     *
     * @param ids 需要删除的服务订单主键集合
     * @return 结果
     */
    public boolean deleteBizServiceOrderByIds(Long[] ids);

    /**
     * 更改状态
     *
     * @param vo 更改状态表单
     * @return 结果
     */
    boolean changeStatus(BizStatusChangeVO vo);

    /**
     * 取消订单
     * @param id
     * @return
     */
    int cancel(Long id);

    /**
     * 派单
     * @param formVO
     * @return
     */
    int dispatch(BizServiceOrderDispatchFormVO formVO);

    /**
     * APP-提交服务订单
     * @param formVO
     * @return
     */
    AppServiceOrderVO submitServiceOrder(AppServiceOrderFormVO formVO);

    /**
     * APP-获取订单列表
     * @param query
     * @return
     */
    List<AppServiceOrderResultVO> selectAppServiceOrderList(AppServiceOrderQueryVO query);

    /**
     * 获取服务订单详情
     * @param id
     * @return
     */
    AppServiceOrderVO selectAppServiceOrderDetail(Long id);

    /**
     * APP-订单支付【陪护豆】
     * @param id
     * @return
     */
    Boolean payment(Long id);

    /**
     * APP-删除订单（逻辑删除）
     * @param id
     * @return
     */
    Boolean logicDeleteOrder(Long id);

    /**
     * 定时刷新订单状态
     * @param dateTime
     */
    void updateServiceOrderStatus(Date dateTime);

    /**
     * 定时刷新订单状态
     * @param dateTime
     */
    void updateServiceOrderAcceptStatus(Date dateTime);

    /**
     * 接单
     * @param id
     * @return
     */
    Boolean receiveOrder(Long id);
    /**
     * 签到
     * @param formVO
     * @return
     */
    Boolean signInOrder(AppSignInOrderFormVO formVO);

    /**
     * 完成服务
     * @param id
     * @return
     */
    Boolean completeOrder(Long id);

    /**
     * 客服帮客户下单
     * @param form
     * @return
     */
    Boolean createHelpCustomerOrder(BizHelpCustomerOrderFormVO form);

    /**
     * 查询订单
     */
    AppServiceOrderVO getServiceOrderByOrderNum(String orderNum);

    void updateServiceOrderByOrderNum(HashMap orderNum);
}
